home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue67 / appbars / Unit3.pas < prev   
Encoding:
Pascal/Delphi Source File  |  2000-12-25  |  3.4 KB  |  129 lines

  1. unit Unit3;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   ComCtrls, ToolWin, ShellAPI, ImgList;
  8.  
  9. const
  10.   wm_AppBarMessage = wm_User;
  11.  
  12. type
  13.   TForm1 = class(TForm)
  14.     CoolBar1: TCoolBar;
  15.     ToolBar1: TToolBar;
  16.     ToolButton1: TToolButton;
  17.     ToolButton2: TToolButton;
  18.     ToolButton3: TToolButton;
  19.     ToolButton4: TToolButton;
  20.     ToolButton5: TToolButton;
  21.     ToolButton6: TToolButton;
  22.     ToolButton7: TToolButton;
  23.     ToolButton8: TToolButton;
  24.     ToolButton9: TToolButton;
  25.     ImageList1: TImageList;
  26.     procedure ToolButton1Click(Sender: TObject);
  27.     procedure FormCreate(Sender: TObject);
  28.     procedure FormDestroy(Sender: TObject);
  29.     procedure FormActivate(Sender: TObject);
  30.     procedure FormShow(Sender: TObject);
  31.   private
  32.     { Private declarations }
  33.     abd: TAppBarData;
  34.     function GetRequestRect: TRect;
  35.     procedure WMAppBarMessage(var Msg: TMessage); message wm_AppBarMessage;
  36.     procedure WMWindowPosChanged(var Msg: TWMWindowPosMsg); message WM_WindowPosChanged;
  37.     property RequestRect: TRect read GetRequestRect;
  38.   public
  39.     { Public declarations }
  40.     procedure CreateParams(var Params: TCreateParams); override;
  41.   end;
  42.  
  43. var
  44.   Form1: TForm1;
  45.  
  46. implementation
  47.  
  48. {$R *.DFM}
  49.  
  50. procedure TForm1.FormCreate(Sender: TObject);
  51. begin
  52.   // fill the AppBarData data structure
  53.   abd.cbSize := sizeof(abd);
  54.   abd.hWnd := Handle;
  55.   abd.uCallBackMessage := wm_AppBarMessage;
  56.   abd.uEdge := ABE_BOTTOM;
  57.   abd.rc := RequestRect;
  58.   abd.lParam := 0;
  59.   SHAppBarMessage(ABM_NEW, abd);
  60.   
  61.   SHAppBarMessage(ABM_QUERYPOS, abd);
  62.   abd.rc.Top := abd.rc.Bottom - Height;
  63.   SHAppBarMessage(ABM_SETPOS, abd);
  64.   SetBounds(abd.rc.Left, abd.rc.Top, abd.rc.Right-abd.rc.Left, abd.rc.Bottom-abd.rc.Top);
  65. end;
  66.  
  67. procedure TForm1.FormDestroy(Sender: TObject);
  68. begin
  69.   SHAppBarMessage(ABM_REMOVE, abd);
  70. end;
  71.  
  72. procedure TForm1.CreateParams(var Params: TCreateParams);
  73. begin
  74.   inherited CreateParams(Params);
  75.   if Params.ExStyle and WS_EX_TOOLWINDOW = 0 then
  76.     Params.ExStyle := Params.ExStyle + WS_EX_TOOLWINDOW;
  77. end;
  78.  
  79. procedure TForm1.FormShow(Sender: TObject);
  80. begin
  81.   ShowWindow(Application.Handle, SW_HIDE);
  82. end;
  83.  
  84. procedure TForm1.FormActivate(Sender: TObject);
  85. begin
  86.   SHAppBarMessage(ABM_ACTIVATE, abd);
  87. end;
  88.  
  89. function TForm1.GetRequestRect: TRect;
  90. begin
  91.   // set the requested Rect
  92.   Result.Left := Screen.Width - Width;
  93.   Result.Top := Screen.Height - Height;
  94.   Result.Right := Screen.Width;
  95.   Result.Bottom := Screen.Height;
  96. end;
  97.  
  98. procedure TForm1.WMAppBarMessage(var Msg: TMessage);
  99. begin
  100.   // hide when fullscreen apps are displayed
  101.   if Msg.wParam = ABN_FULLSCREENAPP then
  102.     if Msg.lParam <> 0 then Hide else Show;
  103.  
  104.   if Msg.wParam = ABN_POSCHANGED then
  105.   begin
  106.     // fill the AppBarData data structure
  107.     abd.rc := RequestRect;
  108.     SHAppBarMessage(ABM_QUERYPOS, abd);
  109.     abd.rc.Top := abd.rc.Bottom - Height;
  110.     abd.rc.Left := abd.rc.Right - Width;
  111.     SHAppBarMessage(ABM_SETPOS, abd);
  112.     SetBounds(abd.rc.Left, abd.rc.Top, abd.rc.Right-abd.rc.Left, abd.rc.Bottom-abd.rc.Top);
  113.   end;
  114. end;
  115.  
  116. procedure TForm1.WMWindowPosChanged(var Msg: TWMWindowPosMsg);
  117. begin
  118.   // must send this message to maintain correct Z-order
  119.   SHAppBarMessage(ABM_WINDOWPOSCHANGED, abd);
  120.   inherited;
  121. end;
  122.  
  123. procedure TForm1.ToolButton1Click(Sender: TObject);
  124. begin
  125.   Close;
  126. end;
  127.  
  128. end.
  129.